Avec Algo/JS, du Javascript francisé

L'avantage est de pouvoir directement modifier et exécuter le code d'un algorithme (script), avec une lisibilité accrue par rapport à du pseudo-code, et en utilisant une syntaxe commune aux langages parmi les plus populaires (comme C, C++, Java et Javascript).

Réaffectations et blocs d'instructions

En Javascript on utilise une syntaxe relativement universelle (les exemples donnés sont modifiables) :

  1. Comme en C, C++, Java et Python, l'expression machin += qq_chose signifie on ajoute qq_chose à machin, c'est donc aussi un mode d'affectation (en général plus efficace à l'exécution que le calcul suivi d'une réaffectation).
    Par exemple :
  2. Comme en C, C++ et Java, la syntaxe { ··· } désigne un bloc d'instructions, elles-mêmes séparées par des points-virgules (en Python c'est différent…Un bloc est a priori défini par une même indentation, rigidifiant ainsi la présentation du code, même si on peut aussi mettre plusieurs instructions sur une même ligne.).
    Par exemple :
  3. Pour une boucle ou un test n'ayant qu'une seule instruction dans le bloc d'instruction(s), on peut omettre les accolades.
    Par exemple :

Des facilités de mise en œuvre

Pour la mise en place d'algorithmes, Algo permet d'utiliser le symbole chapeau comme dans x^n pour exprimer l'exponentiation dans les expressions algébriques (ce qui revient aussi à x.pow(n)), et des mots français à la place (ou en plus) de la syntaxe usuelle (en anglais) :

si, sinon, ET, OU, NON, pour, modulo, fonction, retourner (ou retourne), tant que, indéfini.

Ces mots correspondent respectivement au code JS suivant :

if, else, &&, ||, !, for, %, function, return, while, undefined.

On peut aussi utiliser des mots neutres comme alors et faire pour améliorer la lisibilité en français et exploiter le Javascript avec une syntaxe francisée, comme sur l'exemple :

Le même exemple avec des mots-clés purement Javascript, sachant que les instructions effacer et écrire sont spécifiques à AlgoDok-fr, donc en français :

On peut aussi utiliser des variables globales hors script, comme ici avec n = 1234, modifiables à la main (en cliquant dessus) ou par programme, ou par instruction cliquable comme celle-ci : n = 3758.

D'ou une variante de l'algorithme précédent :

On peut aussi créer dynamiquement une variable globale, considérée alors plutôt comme variable d'entrée. Ci-dessous deux exemples, le premier avec une affectation initiale et l'autre sans :

Pour plus de détails sur les instructions francisées, voir la documentation de référence, partie 4 et suivantes, car Algo permet de faire bien plus que le Javascript standard.

Algo → Algo-fr

En fait, Algo est un exemple minimaliste et représentatif de l'usage d'un langage quelconque pour exprimer des instructions linguistiques qu'AlgoDok traduit en JS, à la volée, via une fonction particulière définie pour chaque langage ; pour Algo c'est AlgoDok.toJS.Algo, déjà définie dans la version française d'AlgoDok.

C'est pourquoi AlgoDok ne signale que des erreurs de syntaxe ou d'exécution portant sur le Javascript réellement exécuté, donc a priori en anglais.

En pratique Algo est souvent exploité avec le module complémentaire Algo-fr qui, après importation, redéfinit la fonction AlgoDok.toJS.Algo et permet une syntaxe plus algorithmique en langage vernaculaire.

Avec Algo-fr on peut par exemple commencer les mots-clés français par une majuscule, et aussi utiliser égale et à la place de == et !=, respectivement. C'est en particulier intéressant pour définir les tests et boucles les plus courants.

Avec Algo-fr on définit de plus AlgoDok.fromJS.Algo, une fonction de traduction en français des messages d'erreur les plus courants, valable aussi pour le langage JS.

Complément : des formules en LaTeX

Avec Formulo, on peut écrire facilement des formules mathématiques, comme celle qui suit : sin(z) = sum_{k = 0}^{+∞} (-1)^k frac{z^{color{red}2k + 1}}{({color{red}2k + 1})!} , qu'on peut facilement cloner (le clone a un nouvel identifiant) : cloner ("la formule 1") .après (ceci) ; mettre ("la formule 1.1") .dans ("la mémoire à instructions").